package com.hyxt.utils;

import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.filter.ByteArrayComparable;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.ValueFilter;
import org.apache.hadoop.hbase.util.Bytes;


/**
 * @Project: CNPC_VMS
 * @Title: HBase区域查车纬度自定义过滤器
 * @Description: 继承HBase中的ValueFiler来完成自定义过滤器
 * @author: yangjl
 * @date: 2014年10月10日 下午6:57:23
 * @company: Beijing Huayou Information andCommunication Technology Co.,Ltd
 * @Copyright: Copyright (c) 2014
 * @version V2.0
 */

public class ValueLatFilters extends ValueFilter {

	/**
	 * @Description 构造方法
	 * @param
	 */
	public ValueLatFilters(CompareOp valueCompareOp, ByteArrayComparable valueComparator) {
		super(valueCompareOp, valueComparator); //直接采用父类构造方法
	}

    /**
	 * @Description 过滤器中判断是否返回值的方法
	 * @param
	 * @return Filter.ReturnCode 是否返回的判定
	 */
	@Override
	public Filter.ReturnCode filterKeyValue(Cell v) {

		String value = new String(CellUtil.cloneValue(v)); //用Cell工具类将Cell中的数据转换为String类型
		String[] splf = value.split("|");  //用“|”分割所得到的值,得到数据数组
		double lat = Double.parseDouble(new String(splf[3]));//按照角标 获取纬度
		/**
		 * @Description doCompare, 把比较对象的值(即传参指定指)与从数据库传来的值进行比较
		 * @param 比较器 比较对象 从数据库得到的的值，比较的起始位置，比较的长度
		 * @return boolean
		 */
		//如果满足设定条件，则Skip 不返回这些值
		if (doCompare(this.compareOp, this.comparator, Bytes.toBytes(lat), 0, Bytes.toBytes(lat).length)) {
			return Filter.ReturnCode.SKIP;
		}
		return Filter.ReturnCode.INCLUDE; //否则得到这些值
	}

}
